from crypt import methods
from unittest import result
from flask import Flask,render_template,request
from DAL import MovieTypeDAL,MovieDAL
from Model import MovieType,Movie

app=Flask(__name__)
mtDAL=MovieTypeDAL()
mDAL=MovieDAL()

#定义一个路由，其具体效果是在网页中显示一个"豆瓣网"，点击该按钮后进入电影类型信息列表页
@app.route("/") 
def index() :
    #return "<a href='/list'>豆瓣网</a>"
    return render_template("index.html")
#定义一个路由，其具体效果是点击对应按钮进入电影类型信息列表页，
#调用DAL.py中的select函数(查询全部)查询数据库中所有电影类型信息
@app.route("/list") 
def list() :
    result=mtDAL.select()
    return render_template("list.html",info=result)

#定义一个路由，其具体效果是点击对应按钮后进入电影类型信息添加页
@app.route("/addKindsOfMovie") 
def addKindsOfMovie() :
    return render_template("addKindsOfMovie.html")

#定义一个路由，其具体效果是点击电影类型信息页的提交按钮后数据库中添加相应信息，
#并且可以回到电影类型信息列表页查看添加后的效果
@app.route("/addSubmit",methods=["post"]) 
def addSubmit() :
    tid=request.form.get("tid")
    tname=request.form.get("tname")
    tcontent=request.form.get("tcontent")
    mt=MovieType(tid,tname,tcontent)
    result=mtDAL.insert(mt)
    if result>0 :
        return "录入成功!<br> <a href='/list'>点击此处返回查看电影列表</a>"
    else :
        return "录入失败!<br> <a href='/list'>点击此处返回查看电影列表</a>"
    
#定义一个路由，其具体效果是点击"修改"按钮后进入到修改页面，其修改的具体数据来源于使用DAL.py中的selecttid函数
#(以电影的具体tid来进行查询)去查询到要修改的电影类型信息
@app.route("/update/<tid>")
def update(tid) :
    result=mtDAL.selecttid(tid)
    return render_template("update.html",info=result)

#定义一个路由，其具体效果是点击修改电影类型信息页面的提交按钮后修改数据库中对应的数据并显示于电影类型信息列表中
#其修改数据的函数来源于调用DAL.py中的update函数
@app.route("/updateSubmit",methods=["POST"])
def updateSubmit() :
    tid=request.form.get("tid")
    tname=request.form.get("tname")
    tcontent=request.form.get("tcontent")
    mt=MovieType(tid,tname,tcontent)
    result=mtDAL.update(mt)
    if result>0 :
        return "修改成功!<br> <a href='/list'>点击此处返回查看电影列表</a>"
    else :
        return "未做修改，保留原始信息<br> <a href='/list'>点击此处返回查看电影列表</a>"

#定义一个路由，其具体效果是点击删除电影类型信息界面的删除按钮后删除对应的电影类型信息数据并显示于电影类型信息列表中
#其删除数据的函数来源于调用DAL.py中的delete函数
@app.route("/delete/<tid>")
def delete(tid) :
    result=mtDAL.delete(tid)
    if result>0 :
        return "删除电影类型信息成功!<br> <a href='/list'>点击此处返回查看电影列表</a>"
    else :
        return "删除电影类型信息失败!<br> <a href='/list'>点击此处返回查看电影列表</a>"
    

#定义一个路由，其具体效果是点击电影类型信息列表页的"查看"后可查看对应电影类型下的电影信息列表
@app.route("/movieList/<tid>")
def movieList(tid) :
    result=mDAL.selectAllMovie(tid)
    return render_template("movieList.html",info=result)

#定义一个路由，其具体效果是点击"添加电影信息"按钮后可以进入到添加电影信息的页面
@app.route("/addMovie")
def addMovie() :
    result=mtDAL.select()
    return render_template("addMovie.html",info=result)

#定义一个路由，其具体效果是点击"添加电影信息"按钮进入添加电影信息的页面输入完电影对应的id序号，名称，上映时间，分数，相关类型后，
#点击"按钮"将对应的数据上传至数据库，并可点击超链接返回查看对应类型的电影列表
@app.route("/addMovieSubmit",methods=["post"])
def addMovieSubmit() :
    id=request.form.get("id")
    title=request.form.get("title")
    mdate=request.form.get("mdate")
    score=request.form.get("score")
    tid=request.form.get("tid")
    m=Movie(id,title,mdate,score,tid)
    result=mDAL.insert(m)
    if result>0 :
        return f"添加电影信息成功!<br> <a href='/movieList/{tid}'>点击此处返回查看电影列表</a>"
    else :
        return f"添加电影信息失败!<br> <a href='/movieList/{tid}'>点击此处返回查看电影列表</a>"
    
#定义一个路由，其具体效果是点击对应类型电影信息列表旁边的"修改"按钮后进入到可修改对应电影信息的页面
@app.route("/updateMovie/<id>")
def updateMovie(id) :
    result=mtDAL.select()
    result1=mDAL.selectid(id)
    return render_template("updateMovie.html",info=result,movie=result1)

#定义一个路由，其具体效果是点击对应类型电影信息列表旁边的"修改"按钮后进入到可修改对应电影信息的页面后，可修改该电影的各种信息
#随后点击"提交"，将数据上传至数据库中，并可点击超链接返回查看对应修改的内容
@app.route("/updateMovieSubmit",methods=["post"])
def updateMovieSubmit() :
    id=request.form.get("id")
    title=request.form.get("title")
    mdate=request.form.get("mdate")
    score=request.form.get("score")
    tid=request.form.get("tid")
    m=Movie(id,title,mdate,score,tid)
    result=mDAL.updateMovie(m)
    if result>0 :
        return f"修改电影信息成功<br> <a href='/movieList/{tid}'>点击返回查看电影信息页</a>"
    else :
        return f"修改电影信息失败<br> <a href='/movieList/{tid}'>点击返回查看电影信息页</a>"

#定义一个路由，其具体效果是点击对应类型的电影信息列表旁边的"删除"按钮后可将对应的电影信息进行删除，并可点击超链接返回查看
#对应的电影信息是否成功删除
@app.route("/deleteMovie/<id>")
def deleteMovie(id) :
    movie=mDAL.selectid(id)
    result=mDAL.deleteMovie(id)
    if result>0 :
        return f"删除电影信息成功!<br> <a href='/movieList/{movie[4]}'>点击此处返回查看电影列表</a>"
    else :
        return f"删除电影信息失败!<br> <a href='/movieList/{movie[4]}'>点击此处返回查看电影列表</a>"
    
#定义一个路由，其具体效果是在首页新增了一个模糊搜索框，只要输入电影名称中的一些字符，便可根据用户输入的字符去进行对电影进行模糊搜索
@app.route("/QueryResult",methods=["POST"])
def QueryResult() :
    title=request.form.get("title")
    result=mDAL.FuzzyQuery(title)
    return render_template("QueryResult.html",info=result)

if __name__=="__main__" :
    app.run(host="127.0.0.1",port=5000,debug=True)